JavaScript λͺ¨λ λμ λΆμ κΈ°λ²μ ν΅ν΄ λ°νμ λμ, 보μ μ·¨μ½μ , μ±λ₯ λ³λͺ© νμμ νμ νμΈμ. μ½λ μ΄ν΄λμ 보μ μνλ₯Ό κ°μ ν©λλ€.
JavaScript λͺ¨λ λμ λΆμ: λ°νμ μΈμ¬μ΄νΈ
μΉμ μ΄λμλ μ‘΄μ¬νλ μΈμ΄μΈ JavaScriptλ μλ μ κ±Έμ³ ν¬κ² λ°μ νμ΅λλ€. λͺ¨λ(ES Modules λ° CommonJS)μ λμ μΌλ‘ μ½λ κ΅¬μ± λ° μ μ§ κ΄λ¦¬μ±μ΄ ν¬κ² ν₯μλμμ΅λλ€. κ·Έλ¬λ νΉν 볡μ‘ν μ ν리μΌμ΄μ μμ μ΄λ¬ν λͺ¨λμ λ°νμ λμμ μ΄ν΄νλ κ²μ μ΄λ €μΈ μ μμ΅λλ€. μ¬κΈ°μ λμ λΆμμ΄ μ€μν μν μ ν©λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ JavaScript λͺ¨λ λμ λΆμμ μΈκ³λ₯Ό νꡬνμ¬ μ μΈκ³ κ°λ°μ λ° λ³΄μ μ λ¬Έκ°λ₯Ό μν κΈ°μ , λꡬ λ° μ΄μ μ λν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
λμ λΆμμ΄λ 무μμ λκΉ?
μννΈμ¨μ΄μ λ§₯λ½μμ λμ λΆμμ νλ‘κ·Έλ¨μ μ€ννμ¬ νλ‘κ·Έλ¨μ λμμ λΆμνλ κ²μ ν¬ν¨ν©λλ€. μ½λλ₯Ό μ€ννμ§ μκ³ κ²μ¬νλ μ μ λΆμκ³Ό λ¬λ¦¬ λμ λΆμμ λ°νμ μ νλ‘κ·Έλ¨μ μν, λ°μ΄ν° νλ¦ λ° μνΈ μμ©μ κ΄μ°°ν©λλ€. μ΄ μ κ·Ό λ°©μμ λ€μκ³Ό κ°μ΄ μ μ λΆμλ§μΌλ‘λ κ°μ§νκΈ° μ΄λ ΅κ±°λ λΆκ°λ₯ν λ¬Έμ λ₯Ό λ°κ²¬νλ λ° νΉν μ μ©ν©λλ€.
- λ°νμ μ€λ₯: μμμΉ λͺ»ν μ λ ₯ λλ νκ²½ 쑰건μΌλ‘ μΈν΄ μ€ν μ€μλ§ λ°μνλ μ€λ₯μ λλ€.
- 보μ μ·¨μ½μ : 곡격μκ° μμ€ν μ μμμν€λ λ° μ μ©ν μ μλ κ²°ν¨μ λλ€.
- μ±λ₯ λ³λͺ© νμ: μ±λ₯ μ νλ₯Ό μ λ°νλ μ½λ μμμ λλ€.
- μ½λ 컀λ²λ¦¬μ§ 격차: μ μ νκ² ν μ€νΈλμ§ μμ μ½λ λΆλΆμ λλ€.
JavaScript λͺ¨λ μμμμ λμ λΆμμ λͺ¨λμ΄ μλ‘ μνΈ μμ©νλ λ°©μ, λͺ¨λ κ°μ λ°μ΄ν°κ° νλ₯΄λ λ°©μ, μ 체 μ ν리μΌμ΄μ λμμ κΈ°μ¬νλ λ°©μμ μ΄ν΄νλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. μ΄λ κ°λ°μμ 보μ μ λ¬Έκ°κ° μ½λλ₯Ό λ κΉμ΄ μ΄ν΄νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ©° μ ν리μΌμ΄μ μ μ λ°μ μΈ νμ§κ³Ό 보μμ κ°μ νλ λ° λμμ΄ λ©λλ€.
JavaScript λͺ¨λμ λν λμ λΆμμ΄ νμν μ΄μ λ 무μμ λκΉ?
JavaScript λͺ¨λμ νΉν λκ·λͺ¨ μ ν리μΌμ΄μ μμ 볡μ‘ν μ’ μμ± λ° μνΈ μμ©μ κ°μ§ μ μμ΅λλ€. λ€μμ JavaScript λͺ¨λμ λμ λΆμμ΄ μ€μν λͺ κ°μ§ μ£Όμ μ΄μ μ λλ€.
1. μ¨κ²¨μ§ μ’ μμ± λ°κ²¬
μ μ λΆμμ λͺ¨λμ import/require λ¬Έμ μ μΈλ λͺ μμ μ’ μμ±μ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. κ·Έλ¬λ λμ λΆμμ μ¦μ λͺ ννμ§ μμ μμμ μ’ μμ±μ λλ¬λΌ μ μμ΅λλ€. μλ₯Ό λ€μ΄ λͺ¨λμ μ μ λ³μ λλ 곡μ κ°μ²΄λ₯Ό ν΅ν΄ λ€λ₯Έ λͺ¨λμ κ°μ μ μΌλ‘ μμ‘΄ν μ μμ΅λλ€. λμ λΆμμ μ½λ μ€ν μ μ΄λ¬ν μ’ μμ±μ μΆμ νμ¬ λͺ¨λ κ΄κ³μ λν λ³΄λ€ μμ ν κ·Έλ¦Όμ μ 곡ν μ μμ΅λλ€.
μ: λ λͺ¨λ `moduleA.js`μ `moduleB.js`λ₯Ό κ³ λ €ν΄ λ³΄μΈμ. `moduleA.js`λ λͺ μμ μΌλ‘ κ°μ Έμ€μ§ μκ³ `moduleB.js`κ° μ¬μ©νλ μ μ λ³μλ₯Ό μμ ν μ μμ΅λλ€. `moduleB.js`μ μ μ λΆμμ μ΄ μ’ μμ±μ λ°νμ§ μμ§λ§ λμ λΆμμ λ°νμ μ μνΈ μμ©μ λͺ ννκ² λ³΄μ¬μ€λλ€.
2. λ°νμ μ€λ₯ κ°μ§
JavaScriptλ λμ μΌλ‘ νμνλ μΈμ΄μ΄λ―λ‘ λ°νμκΉμ§ νμ μ€λ₯κ° κ°μ§λμ§ μλ κ²½μ°κ° λ§μ΅λλ€. λμ λΆμμ μ¬μ©λλ κ°μ νμμ λͺ¨λν°λ§νκ³ λΆμΌμΉλ₯Ό λ³΄κ³ νμ¬ μ΄λ¬ν μ€λ₯λ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. λν null ν¬μΈν° μμΈ, 0μΌλ‘ λλκΈ°, μ€ν μ€λ²νλ‘μ κ°μ κΈ°ν λ°νμ μ€λ₯λ₯Ό κ°μ§ν μ μμ΅λλ€.
μ: λͺ¨λμ΄ null λλ μ μλμ§ μμ κ°μ²΄μ μμ±μ μ‘μΈμ€νλ €κ³ μλν μ μμ΅λλ€. μ΄λ‘ μΈν΄ μ€λ₯κ° λ°μν 컨ν μ€νΈμ ν¨κ» λμ λΆμμ΄ κ°μ§νκ³ λ³΄κ³ ν μ μλ λ°νμ μ€λ₯κ° λ°μν©λλ€.
3. 보μ μ·¨μ½μ μλ³
JavaScript μ ν리μΌμ΄μ μ μ’ μ’ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS), κ΅μ°¨ μ¬μ΄νΈ μμ² μμ‘°(CSRF) λ° μ£Όμ 곡격과 κ°μ λ€μν 보μ μνμ μ·¨μ½ν©λλ€. λμ λΆμμ μ ν리μΌμ΄μ μ λμμ λͺ¨λν°λ§νκ³ μ μ± μ½λ μ£Όμ μλ λλ μ€μν λ°μ΄ν° μ‘μΈμ€μ κ°μ μμ¬μ€λ¬μ΄ νλμ κ°μ§νμ¬ μ΄λ¬ν μ·¨μ½μ μ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
μ: λͺ¨λμ΄ νμ΄μ§μ νμνκΈ° μ μ μ¬μ©μ μ λ ₯μ μ μ νκ² μμ νμ§ μμΌλ©΄ XSSμ μ·¨μ½ν μ μμ΅λλ€. λμ λΆμμ λ°μ΄ν° νλ¦μ λͺ¨λν°λ§νκ³ κ³΅κ²©μκ° μ μ± μ½λλ₯Ό μ£Όμ ν μ μλ λ°©μμΌλ‘ μμ λμ§ μμ μ¬μ©μ μ λ ₯μ΄ μ¬μ©λλ μΈμ€ν΄μ€λ₯Ό μλ³νμ¬ μ΄λ₯Ό κ°μ§ν μ μμ΅λλ€.
4. μ½λ 컀λ²λ¦¬μ§ μΈ‘μ
μ½λ 컀λ²λ¦¬μ§λ ν μ€νΈ μ€μ μ€νλλ μ½λμ μμ μΈ‘μ ν κ²μ λλ€. λμ λΆμμ μ¬μ©νμ¬ ν μ€νΈ μ€ν μ€μ μ€νλλ μ½λ μ€μ μΆμ νμ¬ μ½λ 컀λ²λ¦¬μ§λ₯Ό μΈ‘μ ν μ μμ΅λλ€. μ΄ μ 보λ μ μ νκ² ν μ€νΈλμ§ μμ μ½λ μμμ μλ³νκ³ ν μ€νΈ νμ§μ κ°μ νλ λ° μ¬μ©ν μ μμ΅λλ€.
μ: λͺ¨λμ 쑰건문μ μ¬λ¬ λΆκΈ°κ° μλ κ²½μ° μ½λ 컀λ²λ¦¬μ§ λΆμμ ν μ€νΈ μ€μ λͺ¨λ λΆκΈ°κ° μ€νλλμ§ νμΈν μ μμ΅λλ€. λΆκΈ°κ° μ€νλμ§ μμΌλ©΄ ν μ€νΈκ° κ°λ₯ν λͺ¨λ μλ리μ€λ₯Ό λ€λ£¨μ§ μλλ€λ μλ―Έμ λλ€.
5. μ±λ₯ νλ‘νμΌλ§
λμ λΆμμ μ¬μ©νμ¬ μ½λμ λ€λ₯Έ λΆλΆμ μ€ν μκ°μ μΈ‘μ νμ¬ JavaScript λͺ¨λμ μ±λ₯μ νλ‘νμΌλ§ν μ μμ΅λλ€. μ΄ μ 보λ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ λ λμ μ±λ₯μ μν΄ μ½λλ₯Ό μ΅μ ννλ λ° μ¬μ©ν μ μμ΅λλ€.
μ: λμ λΆμμ μμ£Ό νΈμΆλκ±°λ μ€ννλ λ° μκ°μ΄ μ€λ 걸리λ ν¨μλ₯Ό μλ³ν μ μμ΅λλ€. μ΄ μ 보λ μ½λμ κ°μ₯ μ€μν μμμ μ΅μ ν λ Έλ ₯μ μ§μ€νλ λ° μ¬μ©ν μ μμ΅λλ€.
JavaScript λͺ¨λ λμ λΆμμ μν κΈ°μ
JavaScript λͺ¨λμ λμ λΆμμ μ¬μ©ν μ μλ μ¬λ¬ κ°μ§ κΈ°μ μ΄ μμ΅λλ€. μ΄λ¬ν κΈ°μ μ κ΄λ²μνκ² λ€μκ³Ό κ°μ΄ λΆλ₯ν μ μμ΅λλ€.
1. κ³μΈ‘
κ³μΈ‘μ νλ‘κ·Έλ¨ μ€νμ λν μ 보λ₯Ό μμ§νλ νλ‘λΈλ₯Ό μ½μ νκΈ° μν΄ μ½λλ₯Ό μμ νλ κ²μ ν¬ν¨ν©λλ€. μ΄ μ 보λ νλ‘κ·Έλ¨μ λμμ λΆμνλ λ° μ¬μ©ν μ μμ΅λλ€. κ³μΈ‘μ λꡬλ₯Ό μ¬μ©νμ¬ μλμΌλ‘ λλ μλμΌλ‘ μνν μ μμ΅λλ€. μ΄λ λΆμ νλ‘μΈμ€μ λν μΈλΆνλ μ μ΄λ₯Ό μ 곡νκ³ μμΈν μ 보 μμ§μ νμ©ν©λλ€.
μ: μ½λμ νΉμ μ§μ μμ λ³μ κ°μ κΈ°λ‘νκ±°λ ν¨μμ μ€ν μκ°μ μΈ‘μ νλλ‘ λͺ¨λμ κ³μΈ‘ν μ μμ΅λλ€. μ΄ μ 보λ λͺ¨λμ΄ μ΄λ»κ² λμνλμ§ μ΄ν΄νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ λ° μ¬μ©ν μ μμ΅λλ€.
2. λλ²κΉ
λλ²κΉ μ λλ²κ±°λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό λ¨κ³λ³λ‘ μ€ννκ³ νλ‘κ·Έλ¨μ μνλ₯Ό κ²μ¬νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ λμμ μ€μκ°μΌλ‘ κ΄μ°°νκ³ λ¬Έμ μ κ·Όλ³Έ μμΈμ μλ³ν μ μμ΅λλ€. λλΆλΆμ μ΅μ λΈλΌμ°μ μ Node.jsλ κ°λ ₯ν λλ²κΉ λꡬλ₯Ό μ 곡ν©λλ€.
μ: μ½λμ μ€λ¨μ μ μ€μ νμ¬ νΉμ μ§μ μμ μ€νμ μΌμ μ€μ§νκ³ λ³μ κ°μ κ²μ¬ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ΄ μ΄λ»κ² λμνλμ§ μ΄ν΄νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³ν μ μμ΅λλ€.
3. νλ‘νμΌλ§
νλ‘νμΌλ§μ μ½λμ λ€λ₯Έ λΆλΆμ μ€ν μκ°μ μΈ‘μ νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νλ κ²μ ν¬ν¨ν©λλ€. νλ‘νμΌλ¬λ μΌλ°μ μΌλ‘ νλ‘κ·Έλ¨ μ€νμ λν μκ°μ ννμ μ 곡νμ¬ μ±λ₯ μ νλ₯Ό μ λ°νλ μ½λ μμμ μ½κ² μλ³ν μ μμ΅λλ€. Chrome DevTools λ° Node.jsμ λ΄μ₯ νλ‘νμΌλ¬κ° λ리 μ¬μ©λ©λλ€.
μ: νλ‘νμΌλ¬λ μμ£Ό νΈμΆλκ±°λ μ€ννλ λ° μκ°μ΄ μ€λ 걸리λ ν¨μλ₯Ό μλ³ν μ μμ΅λλ€. μ΄ μ 보λ μ½λμ κ°μ₯ μ€μν μμμ μ΅μ ν λ Έλ ₯μ μ§μ€νλ λ° μ¬μ©ν μ μμ΅λλ€.
4. νΌμ§
νΌμ§μ νλ‘κ·Έλ¨μ΄ μΆ©λνκ±°λ μμμΉ λͺ»ν λμμ λνλ΄λμ§ νμΈνκΈ° μν΄ νλ‘κ·Έλ¨μ μμμ λλ μλͺ»λ μ λ ₯μ μ 곡νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ 보μ μ·¨μ½μ κ³Ό κ²¬κ³ μ± λ¬Έμ λ₯Ό μλ³νλ λ° μ¬μ©ν μ μμ΅λλ€. νΌμ§μ λ€λ₯Έ λ°©λ²μ ν΅ν΄ κ°μ§νκΈ° μ΄λ €μ΄ μ·¨μ½μ μ μ°Ύλ λ° νΉν ν¨κ³Όμ μ λλ€.
μ: μλͺ»λ λ°μ΄ν° λλ μκΈ°μΉ μμ μ λ ₯ κ°μ μ 곡νμ¬ λͺ¨λμ νΌμ§ν μ μμ΅λλ€. μ΄λ 곡격μκ° μ μ©ν μ μλ μ·¨μ½μ μ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
5. μ½λ 컀λ²λ¦¬μ§ λΆμ
μ½λ 컀λ²λ¦¬μ§ λΆμ λꡬλ ν μ€νΈ μ€μ μ€νλλ μ½λ μ€μ μΆμ ν©λλ€. μ΄λ μ μ νκ² ν μ€νΈλμ§ μμ μ½λ μμμ μλ³νκ³ κ°λ°μκ° ν μ€νΈ μ€μνΈμ ν¨μ¨μ±μ κ°μ ν μ μλλ‘ ν©λλ€. Istanbul(νμ¬ NYCμ ν΅ν©λ¨)μ JavaScriptμ λ리 μ¬μ©λλ μ½λ 컀λ²λ¦¬μ§ λꡬμ λλ€.
μ: λͺ¨λμ 볡μ‘ν μ‘°κ±΄λ¬Έμ΄ μλ κ²½μ° μ½λ 컀λ²λ¦¬μ§ λΆμμ λ¬Έμ λͺ¨λ λΆκΈ°κ° ν μ€νΈλκ³ μλμ§ νμΈν μ μμ΅λλ€.
JavaScript λͺ¨λ λμ λΆμμ μν λꡬ
JavaScript λͺ¨λμ λμ λΆμμ μννλ λ° μ¬μ©ν μ μλ μ¬λ¬ λκ΅¬κ° μμ΅λλ€. λͺ κ°μ§ μΈκΈ° μλ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€.
- Chrome DevTools: Chrome λΈλΌμ°μ μ λ΄μ₯λ κ°λ ₯ν λλ²κΉ λ° νλ‘νμΌλ§ λꡬ μΈνΈμ λλ€. μ€λ¨μ , νΈμΆ μ€ν μΆμ , λ©λͺ¨λ¦¬ νλ‘νμΌλ§ λ° μ½λ 컀λ²λ¦¬μ§ λΆμκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
- Node.js Inspector: μ½λλ₯Ό λ¨κ³λ³λ‘ μ€ννκ³ , λ³μλ₯Ό κ²μ¬νκ³ , μ€λ¨μ μ μ€μ ν μ μλ Node.jsμ© λ΄μ₯ λλ²κΉ λꡬμ λλ€. Chrome DevTools λλ κΈ°ν λλ²κΉ ν΄λΌμ΄μΈνΈλ₯Ό ν΅ν΄ μ‘μΈμ€ν μ μμ΅λλ€.
- Istanbul (NYC): ν μ€νΈ μ€μ μ€νλλ μ½λ λΆλΆμ 보μ¬μ£Όλ λ³΄κ³ μλ₯Ό μμ±νλ JavaScriptμ λ리 μ¬μ©λλ μ½λ 컀λ²λ¦¬μ§ λꡬμ λλ€.
- Jalangi: μ¬μ©μ μ§μ λΆμ λꡬλ₯Ό ꡬμΆν μ μλ JavaScriptμ© λμ λΆμ νλ μμν¬μ λλ€. JavaScript μ½λλ₯Ό κ³μΈ‘νκ³ λΆμνκΈ° μν νλΆν API μΈνΈλ₯Ό μ 곡ν©λλ€.
- Triton: Quarkslabμμ κ°λ°ν μ€ν μμ€ λμ λΆμ νλ«νΌμ λλ€. κ°λ ₯νμ§λ§ 볡μ‘νλ©° μΌλ°μ μΌλ‘ λ λ§μ μ€μ κ³Ό μ λ¬Έ μ§μμ΄ νμν©λλ€.
- Snyk: μ£Όλ‘ μ μ λΆμ λꡬμ΄μ§λ§ Snykλ μ’ μμ±μ μ·¨μ½μ μ κ°μ§νκΈ° μν΄ μΌλΆ λμ λΆμλ μνν©λλ€.
μ€μ λμ λΆμ μ¬λ‘
μ€μ μ¬λ‘λ₯Ό ν΅ν΄ JavaScript λͺ¨λμ λμ λΆμμ μ μ©ν μ μλ λ°©λ²μ μ€λͺ νκ² μ΅λλ€.
μ¬λ‘ 1: μν μ’ μμ± κ°μ§
`moduleA.js`μ `moduleB.js`λΌλ λ κ°μ λͺ¨λμ΄ μλ€κ³ κ°μ ν©λλ€. μ΄ λ λͺ¨λμ λ 립μ μ΄μ΄μΌ ν©λλ€. κ·Έλ¬λ μ½λ© μ€λ₯λ‘ μΈν΄ `moduleA.js`λ `moduleB.js`λ₯Ό κ°μ Έμ€κ³ `moduleB.js`λ `moduleA.js`λ₯Ό κ°μ Έμ΅λλ€. κ·Έλ¬λ©΄ μν μ’ μμ±μ΄ μμ±λμ΄ μκΈ°μΉ μμ λμκ³Ό μ±λ₯ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
λμ λΆμμ μ½λ μ€ν μ λͺ¨λ import/require λ¬Έμ μΆμ νμ¬ μ΄ μν μ’ μμ±μ κ°μ§ν μ μμ΅λλ€. λΆμκΈ°κ° νμ¬ νΈμΆ μ€νμμ μ΄λ―Έ κ°μ Έμ¨ λͺ¨λμ κ°μ Έμ€λ λͺ¨λμ λ°κ²¬νλ©΄ μ΄λ₯Ό μν μ’ μμ±μΌλ‘ νλκ·Έν μ μμ΅λλ€.
μ½λ μ‘°κ°(μμ):
moduleA.js:
import moduleB from './moduleB';
export function doA() {
moduleB.doB();
console.log('Doing A');
}
moduleB.js:
import moduleA from './moduleA';
export function doB() {
moduleA.doA();
console.log('Doing B');
}
μ’ μμ± μΆμ μ΄ κ°λ₯ν λμ λΆμ λꡬλ₯Ό μ¬μ©νμ¬ μ΄ μ½λλ₯Ό μ€ννλ©΄ `moduleA`μ `moduleB` κ°μ μν μ’ μμ±μ΄ λΉ λ₯΄κ² κ°μ‘° νμλ©λλ€.
μ¬λ‘ 2: μ±λ₯ λ³λͺ© νμ μλ³
볡μ‘ν κ³μ°μ μννλ λͺ¨λμ κ³ λ €ν΄ λ³΄μμμ€. μ΄ κ³μ°μ΄ μ ν리μΌμ΄μ μ μ±λ₯ λ³λͺ© νμμ μ λ°νλ€κ³ μμ¬λ©λλ€.
λμ λΆμμ λͺ¨λμ μ€νμ νλ‘νμΌλ§νμ¬ λ³λͺ© νμμ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€. νλ‘νμΌλ¬λ λͺ¨λ λ΄μ λ€λ₯Έ ν¨μμ λ¬Έμ μ€ν μκ°μ μΈ‘μ νμ¬ μκ°μ΄ κ°μ₯ μ€λ 걸리λ μ½λμ νΉμ λΆλΆμ μ νν μ°ΎμλΌ μ μμ΅λλ€.
μ½λ μ‘°κ°(μμ):
calculationModule.js:
export function complexCalculation(data) {
let result = 0;
for (let i = 0; i < 1000000; i++) {
result += Math.sqrt(data[i % data.length]);
}
return result;
}
Chrome DevTools λλ Node.jsμ λ΄μ₯ νλ‘νμΌλ¬λ₯Ό μ¬μ©νλ©΄ `complexCalculation` ν¨μκ° μ€μ λ‘ μ ν리μΌμ΄μ μ€ν μκ°μ μλΉ λΆλΆμ μλΉνκ³ μμμ μλ³νμ¬ μ΄ ν¨μλ₯Ό μ‘°μ¬νκ³ μ΅μ ννλλ‘ μ λν μ μμ΅λλ€.
μ¬λ‘ 3: μ μ¬μ μΈ XSS μ·¨μ½μ κ°μ§
λͺ¨λμ μ¬μ©μ μ λ ₯μ λ°μ μ μ ν μμ μμ΄ νμ΄μ§μ νμν©λλ€. κ·Έλ¬λ©΄ 곡격μκ° μ μ± μ½λλ₯Ό νμ΄μ§μ μ£Όμ ν μ μλλ‘ νλ XSS μ·¨μ½μ μ΄ μμ±λ μ μμ΅λλ€.
λμ λΆμμ λ°μ΄ν° νλ¦μ λͺ¨λν°λ§νκ³ μμ λμ§ μμ μ¬μ©μ μ λ ₯μ΄ κ³΅κ²©μκ° μ μ± μ½λλ₯Ό μ£Όμ ν μ μλ λ°©μμΌλ‘ μ¬μ©λλ μΈμ€ν΄μ€λ₯Ό μλ³νμ¬ μ΄ μ·¨μ½μ μ κ°μ§ν μ μμ΅λλ€. λΆμκΈ°λ μ λ ₯ μμ€μμ μΆλ ₯ μ±ν¬λ‘ λ°μ΄ν°λ₯Ό μΆμ νκ³ μμ κ° λλ½λ μΈμ€ν΄μ€μ νλκ·Έλ₯Ό μ§μ ν μ μμ΅λλ€.
μ½λ μ‘°κ°(μμ):
displayModule.js:
export function displayUserInput(userInput) {
document.getElementById('output').innerHTML = userInput; // μ μ¬μ μΈ XSS μ·¨μ½μ
}
보μ μ·¨μ½μ μ μ΄μ μ λ§μΆ λμ λΆμ λꡬλ `innerHTML` μμ±μ΄ μμ μμ΄ μ¬μ©μ μ 곡 μ λ ₯μ μ§μ ν λΉλ°κ³ μκΈ° λλ¬Έμ μ΄ μ½λ μ€μ μ μ¬μ μΈ XSS μ·¨μ½μ μΌλ‘ νλκ·Έν μ μμ΅λλ€.
JavaScript λͺ¨λ λμ λΆμμ μν λͺ¨λ² μ¬λ‘
JavaScript λͺ¨λ λμ λΆμμ μ΅λν νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€.
- λͺ νν λͺ©νλΆν° μμνμμμ€. μμνκΈ° μ μ λμ λΆμμΌλ‘ λ¬μ±νλ €λ λͺ©νλ₯Ό μ μνμμμ€. μ¨κ²¨μ§ μ’ μμ±μ λ°κ²¬νκ³ , λ°νμ μ€λ₯λ₯Ό κ°μ§νκ³ , 보μ μ·¨μ½μ μ μλ³νκ±°λ, μ±λ₯μ νλ‘νμΌλ§νλ €κ³ νμλκΉ? λͺ νν λͺ©νλ₯Ό κ°μ§λ©΄ λ Έλ ₯μ μ§μ€νκ³ μ¬λ°λ₯Έ λꡬμ κΈ°μ μ μ ννλ λ° λμμ΄ λ©λλ€.
- κΈ°μ μ‘°ν©μ μ¬μ©νμμμ€. λ¨μΌ λμ λΆμ κΈ°μ μ΄ λͺ¨λ μν©μ μλ²½ν κ²μ μλλλ€. κΈ°μ μ‘°ν©μ μ¬μ©νμ¬ νλ‘κ·Έλ¨μ λμμ λν λ³΄λ€ μμ ν κ·Έλ¦Όμ μ»μΌμμμ€. μλ₯Ό λ€μ΄ κ³μΈ‘μ μ¬μ©νμ¬ νλ‘κ·Έλ¨ μ€νμ λν μμΈν μ 보λ₯Ό μμ§ν λ€μ λλ²κ±°λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό λ¨κ³λ³λ‘ μ€ννκ³ νλ‘κ·Έλ¨μ μνλ₯Ό κ²μ¬ν μ μμ΅λλ€.
- νλ‘μΈμ€λ₯Ό μλννμμμ€. λμ λΆμμ νΉν λκ·λͺ¨ μ ν리μΌμ΄μ μ κ²½μ° μκ°μ΄ λ§μ΄ 걸릴 μ μμ΅λλ€. μ½λλ₯Ό μλμΌλ‘ κ³μΈ‘νκ³ , ν μ€νΈλ₯Ό μ€ννκ³ , λ³΄κ³ μλ₯Ό μμ±ν μ μλ λꡬλ₯Ό μ¬μ©νμ¬ νλ‘μΈμ€λ₯Ό μ΅λν μλννμμμ€.
- λμ λΆμμ κ°λ° μν¬νλ‘μ ν΅ν©νμμμ€. λμ λΆμμ κ°λ° μν¬νλ‘μ μ κ·μ μΈ λΆλΆμΌλ‘ λ§λμμμ€. λΉλ νλ‘μΈμ€ λλ μ§μμ ν΅ν© νμ΄νλΌμΈμ μΌλΆλ‘ λμ λΆμ λꡬλ₯Ό μ€ννμμμ€. μ΄λ₯Ό ν΅ν΄ λ¬Έμ λ₯Ό μ‘°κΈ°μ νμ νκ³ νλ‘λμ νκ²½μ μ§μ νλ κ²μ λ°©μ§ν μ μμ΅λλ€.
- κ²°κ³Όλ₯Ό μ μ€νκ² λΆμνμμμ€. λμ λΆμ λꡬλ λ§μ λ°μ΄ν°λ₯Ό μμ±ν μ μμ΅λλ€. κ²°κ³Όλ₯Ό μ μ€νκ² λΆμνκ³ κ·Έ μλ―Έλ₯Ό μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λꡬμ κΆμ₯ μ¬νμ λ§Ήλͺ©μ μΌλ‘ λ°λ₯΄μ§ λ§μμμ€. μμ μ νλ¨κ³Ό μ λ¬Έ μ§μμ μ¬μ©νμ¬ μ΅μ μ μ‘°μΉλ₯Ό κ²°μ νμμμ€.
- νκ²½μ κ³ λ €νμμμ€. JavaScript λͺ¨λμ λμμ μ€νλλ νκ²½μ μν₯μ λ°μ μ μμ΅λλ€. λμ λΆμμ μνν λ λΈλΌμ°μ , Node.js λ²μ λ° μ΄μ 체μ λ₯Ό ν¬ν¨νμ¬ νκ²½μ κ³ λ €ν΄μΌ ν©λλ€.
- κ²°κ³Όλ₯Ό λ¬Έμννμμμ€. κ²°κ³Όλ₯Ό λ¬Έμννκ³ νκ³Ό 곡μ νμμμ€. μ΄λ₯Ό ν΅ν΄ μ€μλ‘λΆν° λ°°μ°κ³ λμ λΆμ νλ‘μΈμ€λ₯Ό κ°μ νλ λ° λμμ΄ λ©λλ€.
JavaScript λͺ¨λ λμ λΆμμ λ―Έλ
JavaScript λͺ¨λ λμ λΆμ λΆμΌλ λμμμ΄ μ§ννκ³ μμ΅λλ€. JavaScriptκ° λμ± λ³΅μ‘ν΄μ§κ³ λ μ€μν μ ν리μΌμ΄μ μ μ¬μ©λ¨μ λ°λΌ ν¨κ³Όμ μΈ λμ λΆμ λꡬμ κΈ°μ μ λν νμμ±μ κ³μ μ¦κ°ν κ²μ λλ€. λ€μκ³Ό κ°μ μμμμ λ°μ μ΄ μμ κ²μΌλ‘ μμν μ μμ΅λλ€.
- λ μ κ΅ν κ³μΈ‘ κΈ°μ : λΆμ νλ‘μΈμ€μ λν λ μΈλΆνλ μ μ΄λ₯Ό νμ©νκ³ λ μμΈν μ 보 μμ§μ μν μλ‘μ΄ κΈ°μ μ λλ€.
- κΈ°μ‘΄ κ°λ° λꡬμμ λ λμ ν΅ν©: IDE, λΉλ μμ€ν λ° μ§μμ ν΅ν© νμ΄νλΌμΈμ μννκ² ν΅ν©λ λμ λΆμ λꡬμ λλ€.
- μλν μ¦κ°: μ μ¬μ μΈ λ¬Έμ λ₯Ό μλμΌλ‘ μλ³νκ³ ν΄κ²°μ± μ μ μν μ μλ λꡬμ λλ€.
- 보μ λΆμ κ°μ : λ κ΄λ²μν 보μ μ·¨μ½μ μ κ°μ§νκ³ λ μ ννκ³ μ€ν κ°λ₯ν λ³΄κ³ μλ₯Ό μ 곡ν μ μλ λꡬμ λλ€.
- λ¨Έμ λ¬λ ν΅ν©: λμ λΆμ μ€μ μμ§λ λ°μ΄ν°μμ ν¨ν΄μ μλ³νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μμΈ‘νκΈ° μν΄ λ¨Έμ λ¬λμ μ¬μ©ν©λλ€.
κ²°λ‘
λμ λΆμμ JavaScript λͺ¨λμ λ°νμ λμμ μ΄ν΄νλ κ°λ ₯ν κΈ°μ μ λλ€. λμ λΆμμ μ¬μ©νμ¬ κ°λ°μμ 보μ μ λ¬Έκ°λ μ¨κ²¨μ§ μ’ μμ±μ λ°κ²¬νκ³ , λ°νμ μ€λ₯λ₯Ό κ°μ§νκ³ , 보μ μ·¨μ½μ μ μλ³νκ³ , μ±λ₯μ νλ‘νμΌλ§νκ³ , μ ν리μΌμ΄μ μ μ λ°μ μΈ νμ§κ³Ό 보μμ κ°μ ν μ μμ΅λλ€. JavaScriptκ° κ³μ μ§νν¨μ λ°λΌ λμ λΆμμ μ μΈκ³ JavaScript μ ν리μΌμ΄μ μ μμ μ±κ³Ό 보μμ 보μ₯νλ λ° μ μ λ μ€μν λκ΅¬κ° λ κ²μ λλ€. μ΄λ¬ν κΈ°μ κ³Ό λꡬλ₯Ό μμ©ν¨μΌλ‘μ¨ μ μΈκ³ κ°λ°μλ λ κ°λ ₯νκ³ μμ ν JavaScript μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. ν΅μ¬μ λμ λΆμμ μν¬νλ‘μ ν΅ν©νλ©΄ μ½λ μ΄ν΄λκ° ν₯μλκ³ μ λ°μ μΈ λ³΄μ νμΈκ° κ°νλλ€λ κ²μ λλ€.